import {queryParams} from '@/utils/common.js'

var contentType = 'content-type'
// 这里的vm，就是我们在vue文件里面的this，所以我们能在这里获取vuex的变量，比如存放在里面的token变量
const install = (Vue, vm) => {
	// 此为自定义配置参数，具体参数见上方说明
	Vue.prototype.$u.http.setConfig({
		// baseUrl: 'http://localhost:58504/api',
		// #ifdef APP-PLUS
		baseUrl: 'https://qyglapidev.xahengsoft.com/api',
		// #endif
		// #ifdef H5
		baseUrl: 'APIHOST',
		// #endif
		loadingText: '努力加载中~',
		loadingTime: 800,
	});
	
	// 请求拦截，配置Token等参数
	Vue.prototype.$u.http.interceptor.request = (config) => {
		// 引用token
		// 方式一，存放在vuex的token，假设使用了uView封装的vuex方式
		// 见：https://uviewui.com/components/globalVariable.html
		// config.header.token = vm.token;
		
		// 方式二，如果没有使用uView封装的vuex方法，那么需要使用$store.state获取
		// config.header.token = vm.$store.state.token;
		
		// 方式三，如果token放在了globalData，通过getApp().globalData获取
		// config.header.token = getApp().globalData.username;
		
		// 方式四，如果token放在了Storage本地存储中，拦截是每次请求都执行的
		// 所以哪怕您重新登录修改了Storage，下一次的请求将会是最新值
		const token = uni.getStorageSync('token');
		if(token){
				config.header.Authorization = token;
		}
		// config.header[contentType] = 'application/x-www-form-urlencoded'
		// 可以对某个url进行特别处理，此url参数为this.$u.get(url)中的url值
		// if(config.url == '/user/login') config.header.noToken = true;
		
		// if(config.method == 'POST' && config.data && config.url != 'oa/Repair/ImgBasicUpload' && config.url != 'oa/Patrol/ImgBasicUpload' && config.url != 'oa/OAUser/headImgUpload' && config.url != 'oa/Equip/ImgBasicUpload'&& config.url != 'oa/Finance/payItemAdd'&&config.url!='oa/News/AddEdit' && config.url != 'oa/CheckBill/AddEdit' && config.url != 'oa/CheckBill/AddCheckEdit' && config.url != 'oa/Maint/FinishTask' && config.url != 'oa/Equip/FinishTask' && config.url != 'oa/Equip/FinishTaskOffLine' && config.url != 'oa/CheckBill/CreateCheck'&&config.url != 'oa/CheckBill/AddCheckEditNew' &&config.url != 'oa/Stock/SaveShipments'){
		// 	config.url = config.url + queryParams(config.data,true)
		// }
		return config;
	}
	
	// 响应拦截，判断状态码是否通过
	Vue.prototype.$u.http.interceptor.response = (res) => {
		const {code,data,msg} = res
		if (code === 401 || code === 600) {
			vm.$u.toast('登录过期，请重新登录');
			uni.clearStorage()
			setTimeout(() => {
				console.log("过期过期")
				// 此为uView的方法，详见路由相关文档
				vm.$u.route('/pages/login/login')
				console.log("过期过期1111")
			}, 1500)
			return false;
		}else if (code === 500) {
			vm.$u.toast(msg);
			return false;
        } else if (code !== 200) {
          vm.$u.toast(msg);
          return false;
        }
		return res;
		// //状态码; 0：成功 1：内部请求出错 2：未授权标识 3：请求参数不完整或不正确 4：请求TOKEN失效 5：HTTP请求类型不合法 6：HTTP请求不合法,请求参数可能被篡改 7：该URL已经失效 8:请求数据失败
		// if(res.code == 0||res.code == 9) {
		// 	// res为服务端返回值，可能有code，result等字段
		// 	// 这里对res.result进行返回，将会在this.$u.post(url).then(res => {})的then回调中的res的到
		// 	// 如果配置了originalData为true，请留意这里的返回值
		// 	return res.data;
		// }else if(res.code == 1){
		// 	vm.$u.toast(res.msg);
		// 	return res.data;
		// }else if(res.code == 4) {
		// 	// 假设201为token失效，这里跳转登录
		// 	vm.$u.toast('验证失败，请重新登录');
		// 	uni.clearStorage()
		// 	setTimeout(() => {
		// 		// 此为uView的方法，详见路由相关文档
		// 		vm.$u.route('/pages/login/index')
		// 	}, 1500)
		// 	return false;
		// } else {
		// 	// 如果返回false，则会调用Promise的reject回调，
		// 	// 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中，res为服务端的返回值
		// 	if(res.msg){
		// 		vm.$u.toast(res.msg);
		// 	}
		// 	return false;
		// }
	}
}

export default {
	install
}
